using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IndoorsTools
{
    /// <summary>
    /// <para>Generate Occupant Features</para>
    /// <para>Creates or updates employee or occupant point data that conforms to the ArcGIS Indoors Information Model.</para>
    /// <para>创建或更新符合 ArcGIS Indoors 信息模型的员工或占用者点数据。</para>
    /// </summary>    
    [DisplayName("Generate Occupant Features")]
    public class GenerateOccupantFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateOccupantFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_unit_features">
        /// <para>Input Unit Features</para>
        /// <para>The input polygon features representing building spaces that may be occupied. In the ArcGIS Indoors Information Model, this is the Units layer. The centroid of each space will be used as the point location of the occupant or occupants.</para>
        /// <para>输入面要素表示可能被占用的建筑空间。在 ArcGIS Indoors 信息模型中，这是 Units 图层。每个空间的质心将用作一个或多个占用者的点位置。</para>
        /// </param>
        /// <param name="_unit_id_field">
        /// <para>Unit ID Field</para>
        /// <para>The field in the Input Unit Features parameter values that will be used as the primary key to associate building spaces with records in the Input Occupant Table parameter value.</para>
        /// <para>输入单元要素参数值中的字段，将用作将建筑物空间与输入占用者表参数值中的记录相关联的主键。</para>
        /// </param>
        /// <param name="_in_occupant_table">
        /// <para>Input Occupant Table</para>
        /// <para><xdoc>
        ///   <para>The input table that contains information about building occupants.</para>
        ///   <para>The information can be stored in a geodatabase table, a sheet in an Excel workbook (.xls or .xlsx file), or a .csv file.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>包含有关建筑物居住者的信息的输入表。</para>
        ///   <para>这些信息可以存储在地理数据库表、Excel 工作簿（.xls 或 .xlsx 文件）中的工作表或 .csv 文件中。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_occupant_id_field">
        /// <para>Occupant ID Field</para>
        /// <para>The field in the Input Occupant Table parameter value that will be used as the primary key to associate occupants with Input Unit Features parameter values.</para>
        /// <para>输入占用者表参数值中的字段，该字段将用作将占用者与输入单元要素参数值相关联的主键。</para>
        /// </param>
        /// <param name="_out_occupant_feature_class">
        /// <para>Output Occupant Feature Class</para>
        /// <para>The output feature class created from joining the Input Unit Features and Input Occupant Table parameter values.</para>
        /// <para>通过连接输入单位要素和输入占用表参数值创建的输出要素类。</para>
        /// </param>
        public GenerateOccupantFeatures(object _in_unit_features, object _unit_id_field, object _in_occupant_table, object _occupant_id_field, object _out_occupant_feature_class)
        {
            this._in_unit_features = _in_unit_features;
            this._unit_id_field = _unit_id_field;
            this._in_occupant_table = _in_occupant_table;
            this._occupant_id_field = _occupant_id_field;
            this._out_occupant_feature_class = _out_occupant_feature_class;
        }
        public override string ToolboxName => "Indoors Tools";

        public override string ToolName => "Generate Occupant Features";

        public override string CallName => "indoors.GenerateOccupantFeatures";

        public override List<string> AcceptEnvironments => ["outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_in_unit_features, _unit_id_field, _in_occupant_table, _occupant_id_field, _out_occupant_feature_class, _updated_unit_feature_class];

        /// <summary>
        /// <para>Input Unit Features</para>
        /// <para>The input polygon features representing building spaces that may be occupied. In the ArcGIS Indoors Information Model, this is the Units layer. The centroid of each space will be used as the point location of the occupant or occupants.</para>
        /// <para>输入面要素表示可能被占用的建筑空间。在 ArcGIS Indoors 信息模型中，这是 Units 图层。每个空间的质心将用作一个或多个占用者的点位置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Unit Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_unit_features { get; set; }


        /// <summary>
        /// <para>Unit ID Field</para>
        /// <para>The field in the Input Unit Features parameter values that will be used as the primary key to associate building spaces with records in the Input Occupant Table parameter value.</para>
        /// <para>输入单元要素参数值中的字段，将用作将建筑物空间与输入占用者表参数值中的记录相关联的主键。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Unit ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _unit_id_field { get; set; }


        /// <summary>
        /// <para>Input Occupant Table</para>
        /// <para><xdoc>
        ///   <para>The input table that contains information about building occupants.</para>
        ///   <para>The information can be stored in a geodatabase table, a sheet in an Excel workbook (.xls or .xlsx file), or a .csv file.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>包含有关建筑物居住者的信息的输入表。</para>
        ///   <para>这些信息可以存储在地理数据库表、Excel 工作簿（.xls 或 .xlsx 文件）中的工作表或 .csv 文件中。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Occupant Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_occupant_table { get; set; }


        /// <summary>
        /// <para>Occupant ID Field</para>
        /// <para>The field in the Input Occupant Table parameter value that will be used as the primary key to associate occupants with Input Unit Features parameter values.</para>
        /// <para>输入占用者表参数值中的字段，该字段将用作将占用者与输入单元要素参数值相关联的主键。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Occupant ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _occupant_id_field { get; set; }


        /// <summary>
        /// <para>Output Occupant Feature Class</para>
        /// <para>The output feature class created from joining the Input Unit Features and Input Occupant Table parameter values.</para>
        /// <para>通过连接输入单位要素和输入占用表参数值创建的输出要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Occupant Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_occupant_feature_class { get; set; }


        /// <summary>
        /// <para>Updated Unit Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Unit Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_unit_feature_class { get; set; }


        public GenerateOccupantFeatures SetEnv(object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}